//app.js
App({
  globalData: {
    supplierId: null,
    socketUrl: null, // socketUrl
    timeout: 10000, // 延迟
    socketHeartTimer: null,
    callback: (e) => {}, // socket连接回调函数
    socketClientTimer: null, // socket连接定时器
    isSocketConnect: false, // 当前socket是否连接
  },
  onShow() {
    // 开启socket
    //this.connectSocketFunciton();
  },
  // 小程序进入后台
  onHide() {
    // 关闭全局socket状态连接定时器
    clearInterval(this.globalData.socketClientTimer)
    // 关闭socket
    this.closeSocketFunction()
  },
  // 检查用户登录状态，并决定是否开启socket
  checkLoginUserSocket() {
    this.globalData.supplierId = wx.getStorageSync('supplierId') || null;
    if (this.globalData.supplierId) {
      //登录状态下调用连接socket 且判断是否已经连接socket 
      if (!this.globalData.isSocketConnect) {
        // console.log("-----用户一登录---连接socket")
        this.connectSocketFunciton()
      }
    } else {
      // console.log("-----用户未登录--关闭socket")
      //未登录状态下清除定时器关闭socket
      this.closeSocketFunction()
    }
  },
  //小程序连接socket
  connectSocketFunciton() {
    var that = this
    var socketUrl = `wss://talent.199.nuomayun.com:2348`
    wx.connectSocket({
      url: socketUrl,
      success: (res => {
        // 标识socket已连接
        that.globalData.isSocketConnect = true
        // 初始化连接监听
        that.initEventHandler()
      }),
      fail: (fail => {})
    })
  },
  // 绑定监听
  initEventHandler() {
    var that = this
    // socket连接开启
    wx.onSocketOpen((result) => {
      // 开启心跳
      that.startHeart()
    })
    // socket连接关闭
    wx.onSocketClose((res) => {
      if (that.globalData.isSocketConnect) {
        that.connectSocketFunciton()
      }
    })
    // 接收socket消息
    wx.onSocketMessage((res) => {
      console.log("onSocketMessage", res)
      //第一次消息如果为init就绑定uid
      // var data = JSON.parse(res.data)
      //这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理
      // 全局socket接收消息的方法回调
      that.globalData.callback(res)
    })
  },
  //发送心跳
  startHeart() {
    if (this.globalData.isSocketConnect) {
      this.globalData.socketHeartTimer = setInterval(() => {
        wx.sendSocketMessage({
          data: 'heartBath',
          success: function (res) {},
          fail: function (res) {}
        })
      }, 45 * 1000)
    } else {
      clearTimeout(this.globalData.socketHeartTimer)
    }
  },
  //此页面关闭socket和定时器的函数
  closeSocketFunction: function () {
    if (this.globalData.isSocketConnect) {
      // 标识socket已断开
      this.globalData.isSocketConnect = false
      // 关闭socket连接
      wx.closeSocket()
      // 关闭socket心跳定时器
      clearInterval(this.globalData.socketHeartTimer)
    }
  },
  onLaunch: function () {
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())

    wx.cloud.init({
      // env 参数说明：
      //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
      //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
      //   如不填则使用默认环境（第一个创建的环境）
      //env: 'prod-5gdknl68c6dc28cf',
      traceUser: true,
    })


    //wx.setStorageSync('logs', logs)
    //贝塞尔曲线
    this.screenSize();
    // 登录
    // wx.login({
    //   success: res => {
    //     // 发送 res.code 到后台换取 openId, sessionKey, unionId
    //   }
    // })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })

    // const updateManager = wx.getUpdateManager();
    // updateManager.onCheckForUpdate(function (res) {
    //   // 请求完新版本信息的回调
    //   console.log(res.hasUpdate)
    // })

    // updateManager.onUpdateReady(function () {
    //   wx.showModal({
    //     title: '更新提示',
    //     content: '新版本已经准备好，是否重启应用？',
    //     success: function (res) {
    //       if (res.confirm) {
    //         // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
    //         updateManager.applyUpdate()
    //       }
    //     }
    //   })
    // })

    // updateManager.onUpdateFailed(function () {
    //   // 新版本下载失败
    // })
    
  },
  overShare () {
    //监听路由切换
    wx.onAppRoute((res) => {
      let pages = getCurrentPages(),
        view = pages[pages.length - 1]
        if (view) {
          wx.showShareMenu({
            withShareTicket: true,
            menus: ['shareAppMessage', 'shareTimeline']
          })
        }
    })
  },
  //  贝塞尔曲线开始
  screenSize: function () {
    var that = this;
    wx.getSystemInfo({
      success: function (res) {
        var ww = res.windowWidth;
        var hh = res.windowHeight;
        that.globalData.ww = ww;
        that.globalData.hh = hh;
      }
    })
  },
  bezier: function (points, part) {
    let sx = points[0]['x'];
    let sy = points[0]['y'];
    let cx = points[1]['x'];
    let cy = points[1]['y'];
    let ex = points[2]['x'];
    let ey = points[2]['y'];
    var bezier_points = [];
    // 起始点到控制点的x和y每次的增量
    var changeX1 = (cx - sx) / part;
    var changeY1 = (cy - sy) / part;
    // 控制点到结束点的x和y每次的增量
    var changeX2 = (ex - cx) / part;
    var changeY2 = (ey - cy) / part;
    //循环计算
    for (var i = 0; i <= part; i++) {
      // 计算两个动点的坐标
      var qx1 = sx + changeX1 * i;
      var qy1 = sy + changeY1 * i;
      var qx2 = cx + changeX2 * i;
      var qy2 = cy + changeY2 * i;
      // 计算得到此时的一个贝塞尔曲线上的点
      var lastX = qx1 + (qx2 - qx1) * i / part;
      var lastY = qy1 + (qy2 - qy1) * i / part;
      // 保存点坐标
      var point = {};
      point['x'] = lastX;
      point['y'] = lastY;
      bezier_points.push(point);
    }
    return {
      'bezier_points': bezier_points
    };
  },
  //  贝塞尔曲线结束
  globalData: {
    userInfo: null
  }
})